package a66weding.com.jiehuntong.common.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

/**
 * 这是一个生成二维码的工具类
 * Created by Administrator on 2016/7/13.
 */
public class CreateZxingUtils {
    private ImageView imageView;
    private int QR_WIDTH;
    private int QR_HEIGHT;
    private Context content;

    /**
     * 构造方法中传入图片和url
     * @param imageView
     * @param url
     */
    public CreateZxingUtils(ImageView imageView,String url ,int QR_WIDTH ,int QR_HEIGHT){
        this.imageView = imageView;
        this.QR_WIDTH = QR_WIDTH;
        this.QR_HEIGHT = QR_HEIGHT;
        createQRImage(url);

    }


    /**
     * 根据url创建二维码
     * @param url
     */
    public void createQRImage(String url){
        //判断url的合法性
        if(url==null||"".equals(url)||url.length()<1){
            return;
        }
        Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        //使用图像数据转化
        if (QR_WIDTH > 0 && QR_HEIGHT >0){
            try {

                BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE,QR_WIDTH,QR_HEIGHT,hints);
                //像素是每一个点组成的;
                int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
                for(int y = 0; y < QR_HEIGHT; y++){
                    for (int x = 0; x < QR_WIDTH; x++) {
                        if (bitMatrix.get(x, y)) {
                            pixels[y * QR_WIDTH + x] = 0xff000000;
                        } else {
                            pixels[y * QR_WIDTH + x] = 0xffffffff;
                        }
                    }
                }
                //生成二维码图片的格式，使用ARGB_8888
                Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);
                bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
                //显示到一个ImageView上面
                imageView.setImageBitmap(bitmap);
            } catch (WriterException e) {
                e.printStackTrace();
            }
        }

    }

}

